package br.com.afi.util.crypt;

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import org.apache.log4j.Logger;

/**
 * Utilize essa classe para realizar a criptográfia de Hash utilizando MD5.<br>
 * Obs: Não é possível descriptografar.
 * 
 * @author André de Fontana Ignacio
 * @version 1.0
 */
public class HashMD5Algorithm implements CryptoAlgorithm
{
	private Logger log = Logger.getLogger( HashMD5Algorithm.class );
	private MessageDigest md;

	/**
	 * Construtor
	 */
	public HashMD5Algorithm()
	{
		super();

		try
		{
			md = MessageDigest.getInstance( "MD5" );
			log.info( "Utilizando algoritmo de MD5/Hash" );
		}
		catch ( NoSuchAlgorithmException e )
		{
			log.error( e.getMessage(), e );
		}
	}

	@Override
	public String crypt( String str )
	{
		String coded = null;
		md.reset();
		md.update( str.getBytes() );
		final BigInteger hash = new BigInteger( 1, md.digest() );
		coded = hash.toString( 16 );
		return coded;
	}

	@Override
	public String decrypt( String str )
	{
		throw new UnsupportedOperationException( "Não é possível descriptografar um algoritmo de hash." );
	}

}
